package com.loongtech.core.util;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * mac加密算法
 * @author xckuang
 * @date 2015年04月09日
 */
public class MacUtil
{
	private static final String	MAC_NAME	= "HmacSHA1";
	private static final String	ENCODING	= "UTF-8";

	/**
	 * 使用 HMAC-SHA1 签名方法对对encryptText进行签名
	 * @param encryptText
	 *        被签名的字符串
	 * @param encryptKey
	 *        密钥
	 * @return 返回被加密后的字符串
	 * @throws Exception
	 */
	public static String HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception
	{
		return HmacSHA1Encrypt(MAC_NAME, ENCODING, encryptText, encryptKey);
	}

	public static String HmacSHA1Encrypt(String alg, String charset, String encryptText, String encryptKey) throws Exception
	{
		charset = null == charset ? ENCODING : charset;
		alg = null == alg ? MAC_NAME :alg;
		byte[] data = encryptKey.getBytes(charset);
		// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
		SecretKey secretKey = new SecretKeySpec(data, alg);
		// 生成一个指定 Mac 算法 的 Mac 对象
		Mac mac = Mac.getInstance(alg);
		// 用给定密钥初始化 Mac 对象
		mac.init(secretKey);
		byte[] text = encryptText.getBytes(charset);
		// 完成 Mac 操作
		return Hex.encodeHexStr(mac.doFinal(text));
	}
}
